// class Solution {
// public:
//     int subarraysDivByK(vector<int>& nums, int k) {
//         //同余定理 如果 (sum - x) % k =0那么就有 sum % K =x % K
//         //但是为了保证sum % K 为正数 需要修正为(sum % k +k)%k
//         //所以同余定理最后的式子为 (sum % k +k)%k =x % 
//         //怎么理解这一点 其实就是如果(sum % k +k)%k 计算后的值，如果和前面经过同样的方式计算的余数相同的时候，此时就是说，此时的和比上一次出现相同余数的和多了一个周期也就是一个k
//         int sum = 0;
//         unordered_map <int ,int> hash;
//         int ret =0;
//         hash[0] =1;
//         for (auto x : nums)
//         {
//             sum +=x;
//             int r =(sum % k +k)%k;
//             if(hash.find(r) != hash.end())
//             {
//                 ret +=hash[r];
//             }
//             hash[r]++;
//         }
//         return ret;
//     }
// };

// //https://leetcode.cn/problems/subarray-sums-divisible-by-k/description/